Немного полезных команд mysql, выкладываю тут, чтоб не потерять :)
Функция COUNT подсчитывает количество записей в таблице.
Условие, по которому будут выбираться записи, задается с помощью команды where.
Команда where не является обязательной, если ее не указать — будут подсчитаны все записи в таблице.
См. также команду distinct, которая позволяет подсчитывать только уникальные значения поля.
См. также команду group by, которая позволяет группировать записи и затем с помощью count подсчитывать количество в группах.
Синтаксис
Подсчет всех записей:
SELECT COUNT(*) FROM имя_таблицы WHERE условие
Подсчет всех записей, где заданное поле не равно NULL:
SELECT COUNT(поле) FROM имя_таблицы WHERE условие
Только уникальные значения поля:
SELECT COUNT(DISTINCT поле) FROM имя_таблицы WHERE условие
Примеры
Все примеры будут по этой таблице workers, если не сказано иное:
id айди |
name имя |
age возраст |
salary зарплата |
1 | Дима | 23 | 400 |
2 | Петя | 25 | 500 |
3 | Вася | 23 | 500 |
4 | Коля | 30 | 1000 |
5 | Иван | 27 | 500 |
6 | Кирилл | 28 | 1000 |
Пример
Давайте подсчитаем всех работников с возрастом 23 года:
SELECT COUNT(*) as count FROM workers WHERE age=23
Результат выполнения SQL запроса:
count результат подсчета |
2 |
Пример
Давайте подсчитаем количество разных зарплат (их будет 3 штуки: 400, 500 и 1000):
SELECT COUNT(DISTINCT salary) as count FROM workers
Результат выполнения SQL запроса:
count результат подсчета |
3 |
Пример
Давайте подсчитаем одновременно количество разных возрастов и количество разных зарплат:
SELECT
COUNT(DISTINCT age) as count1,
COUNT(DISTINCT salary) as count2
FROM workers
Результат выполнения SQL запроса:
count1 количество возрастов |
count2 количество зарплат |
5 | 3 |
Меняем таблицу для примеров
Все примеры ниже будут по этой таблице workers, если не сказано иное:
id айди |
name имя |
age возраст |
salary зарплата |
1 | Дима | 23 | NULL |
2 | Петя | 25 | 500 |
3 | Вася | 23 | NULL |
Пример
Давайте подсчитаем количество всех записей:
SELECT COUNT(*) as count FROM workers
Результат выполнения SQL запроса:
count результат подсчета |
3 |
А теперь подсчитаем количество зарплат, не равных NULL:
SELECT COUNT(salary) as count FROM workers
Результат выполнения SQL запроса:
count результат подсчета |
1 |
Команда BETWEEN задает диапазон значений, по которому выбираются записи из базы данных.
К примеру, можно выбрать записи для поля id от 3 до 10-ти.
См. также команду not, которая делает отрицание (к примеру, так: not between).
См. также команду in, которая выбирает записи по указанным значениям.
Синтаксис
SELECT * FROM имя_таблицы WHERE поле BETWEEN от AND до
Примеры
Все примеры будут по этой таблице workers, если не сказано иное:
id айди |
name имя |
age возраст |
salary зарплата |
1 | Дима | 23 | 400 |
2 | Петя | 25 | 500 |
3 | Вася | 23 | 500 |
4 | Коля | 30 | 1000 |
5 | Иван | 27 | 500 |
6 | Кирилл | 28 | 1000 |
Пример
Давайте выберем записи с id от 2-х до 4-х включительно:
SELECT * FROM workers WHERE id BETWEEN 2 AND 4
SQL запрос выберет следующие строки:
id айди |
name имя |
age возраст |
salary зарплата |
2 | Петя | 25 | 500 |
3 | Вася | 23 | 500 |
4 | Коля | 30 | 1000 |
Пример
Можно комбинировать различные условия. К примеру, давайте выберем записи с id от 2-х до 4-х включительно и чтобы при этом зарплата была 500:
SELECT * FROM workers WHERE id BETWEEN 2 AND 4 AND salary=500
SQL запрос выберет следующие строки:
id айди |
name имя |
age возраст |
salary зарплата |
2 | Петя | 25 | 500 |
3 | Вася | 23 | 500 |
Пример
Диапазон можно делать не только по числовым значениям, но и по строковым. В следующем примере мы выберем все записи с именами между ‘Дима’ и ‘Коля’ (сравнение идет в алфавитном порядке):
SELECT * FROM workers WHERE name BETWEEN ‘Дима’ AND ‘Коля’
SQL запрос выберет следующие строки:
id айди |
name имя |
age возраст |
salary зарплата |
1 | Дима | 23 | 400 |
4 | Коля | 30 | 1000 |
5 | Иван | 27 | 500 |
6 | Кирилл | 28 | 1000 |
Команда IN выбирает записи из базы данных по определенным значениям поля.
К примеру, можно выбрать записи, у которых id имеет значение 1, 3, 7, 14, 28. Это будет выглядеть так: WHERE id IN (1, 3, 7, 14, 28).
Или же все записи, у которых поле name имеет значение ‘Дима’, ‘Вася’ или ‘Коля’. Это будет выглядеть так: WHERE id IN (‘Дима’, ‘Вася’, ‘Коля’).
В принципе, для таких вещей можно пользоваться и командой or, тогда первый пример будет выглядеть так: WHERE id=1 OR id=3 OR id=7 OR id=14 OR id=28. Вариант с IN все-таки выглядит проще и изящнее.
См. также команду not, которая делает отрицание (к примеру, так: not in).
См. также команду between, которая выбирает записи по диапазону значений.
Синтаксис
SELECT * FROM имя_таблицы WHERE поле IN (значение1, значение2…)
Примеры
Все примеры будут по этой таблице workers, если не сказано иное:
id айди |
name имя |
age возраст |
salary зарплата |
1 | Дима | 23 | 400 |
2 | Петя | 25 | 500 |
3 | Вася | 23 | 500 |
4 | Коля | 30 | 1000 |
5 | Иван | 27 | 500 |
6 | Кирилл | 28 | 1000 |
Пример
Давайте выберем записи с id, равным 1, 3 и 5:
SELECT * FROM workers WHERE id IN (1, 3, 5)
SQL запрос выберет следующие строки:
id айди |
name имя |
age возраст |
salary зарплата |
1 | Дима | 23 | 400 |
3 | Вася | 23 | 500 |
5 | Иван | 27 | 500 |
Пример
Давайте выберем записи с именами ‘Дима’, ‘Коля’, ‘Кирилл’:
SELECT * FROM workers WHERE id IN (‘Дима’, ‘Коля’, ‘Кирилл’)
SQL запрос выберет следующие строки:
id айди |
name имя |
age возраст |
salary зарплата |
1 | Дима | 23 | 400 |
4 | Коля | 30 | 1000 |
6 | Кирилл | 28 | 1000 |
Команда LIKE задает поиск по определенному шаблону.
См. также команду not, которая делает отрицание (к примеру, так: not like).
Синтаксис
SELECT * FROM имя_таблицы WHERE поле LIKE шаблон_поиска
Примеры
Все примеры будут по этой таблице workers, если не сказано иное:
id айди |
name имя |
age возраст |
salary зарплата |
1 | Дима | 23 | 400 |
2 | Петя | 25 | 500 |
3 | Вася | 23 | 500 |
4 | Коля | 30 | 1000 |
5 | Иван | 27 | 500 |
6 | Кирилл | 28 | 1000 |
Пример
В данном примере команда like найдет все записи, у которых имя заканчивается на ‘я’:
SELECT * FROM workers WHERE name LIKE ‘%я’
SQL запрос выберет следующие строки:
id айди |
name имя |
age возраст |
salary зарплата |
2 | Петя | 25 | 500 |
3 | Вася | 23 | 500 |
4 | Коля | 30 | 1000 |
Пример
Давайте выберем те записи, у которых возраст начинается с цифры 2, а затем идет еще один символ:
SELECT * FROM workers WHERE age LIKE ‘2_’
SQL запрос выберет следующие строки:
id айди |
name имя |
age возраст |
salary зарплата |
1 | Дима | 23 | 400 |
2 | Петя | 25 | 500 |
3 | Вася | 23 | 500 |
5 | Иван | 27 | 500 |
6 | Кирилл | 28 | 1000 |
Команда AS задает новое имя полям или таблицам при выборке из базы (то есть в самой базе изменения не происходят).
См. также команду join, в которой активно используется команда as.
Синтаксис
Для полей:
SELECT поле as его_новое_имя FROM имя_таблицы
Для таблиц:
SELECT * FROM имя_таблицы as его_новое_имя_таблицы
Примеры
Все примеры будут по этой таблице workers, если не сказано иное:
id айди |
name имя |
age возраст |
salary зарплата |
1 | Дима | 23 | 400 |
2 | Петя | 24 | 500 |
3 | Вася | 25 | 600 |
Пример
Давайте при выборке переименуем все поля:
SELECT
id as user_id, name as user_name,
age as user_age, salary as user_salary
FROM workers
SQL запрос выберет следующие строки:
user_id айди |
user_name имя |
user_age возраст |
user_salary зарплата |
1 | Дима | 23 | 400 |
2 | Петя | 24 | 500 |
3 | Вася | 25 | 600 |
Пример
Можно из одного поля сделать два (и более):
SELECT name as name1, name as name2 FROM workers
SQL запрос выберет следующие строки:
name1 имя |
name2 имя |
Дима | Дима |
Петя | Петя |
Вася | Вася |
Команда DISTINCT позволяет выбирать только уникальные значения из базы данных (то есть отсеивает дубли: к примеру, в таблице есть две Маши — тогда запрос выведет только первую).
Вместо DISTINCT можно использовать DISTINCTROW — в mySQL это одно и то же.
См. также команду count, которая может быть использована для подсчета уникальных значений (в комбинации с distinct).
Синтаксис
При выборке:
SELECT DISTINCT поле FROM имя_таблицы WHERE условие
При подсчете:
SELECT COUNT(DISTINCT поле) FROM имя_таблицы WHERE условие
При суммировании:
SELECT SUM(DISTINCT поле) FROM имя_таблицы WHERE условие
Примеры
Все примеры будут по этой таблице workers, если не сказано иное:
id айди |
name имя |
age возраст |
salary зарплата |
1 | Дима | 23 | 400 |
2 | Петя | 25 | 500 |
3 | Вася | 23 | 500 |
4 | Коля | 30 | 1000 |
5 | Иван | 27 | 500 |
6 | Кирилл | 28 | 1000 |
Пример
Давайте выберем все уникальные значения зарплат из таблицы workers:
SELECT DISTINCT salary FROM workers
SQL запрос выберет следующие строки:
salary зарплата |
400 |
500 |
1000 |
Пример
Давайте подсчитаем все уникальные значения зарплат из таблицы workers (их будет 3 штуки: 400, 500 и 1000):
SELECT COUNT(DISTINCT salary) as count FROM workers
SQL запрос выберет следующие строки:
count количество |
3 |
Пример
Давайте подсчитаем одновременно все уникальные значения зарплат и уникальные значения возрастов и запишем их в разные поля:
SELECT
COUNT(DISTINCT salary) as salary_count,
COUNT(DISTINCT age) as age_count
FROM workers
SQL запрос выберет следующие строки:
salary_count зарплата |
age_count возраст |
3 | 5 |
Пример
Давайте просуммируем все уникальные значения зарплат из таблицы workers:
SELECT SUM(DISTINCT salary) as sum FROM workers
SQL запрос выберет следующие строки:
sum суммарная зарплата |
1900 |
Команда NOT задает отрицание для других команд: вместо IN можно написать NOT IN, вместо BETWEEN — NOT BETWEEN и так далее.
Как это работает: возьмем, для примера, команду IN и с ее помощью выберем записи, у которых id имеет значение 1, 3, 7, 14, 28. Это будет выглядеть так: WHERE id IN (1, 3, 7, 14, 28).
А теперь воспользуемся отрицанием not и выберем все записи, у которых id НЕ равен 1, 3, 7, 14, 28 таким образом: WHERE id NOT IN (1, 3, 7, 14, 28).
См. также команду is null, которая проверяет поле на NULL.
См. также команду is not null, которая проверяет поле на не NULL.
Синтаксис
NOT IN (значение1, значение2…)
NOT BETWEEN значение1 AND значение2
NOT LIKE шаблон
Примеры
Все примеры будут по этой таблице workers, если не сказано иное:
id айди |
name имя |
age возраст |
salary зарплата |
1 | Дима | 23 | 400 |
2 | Петя | 25 | 500 |
3 | Вася | 23 | 500 |
4 | Коля | 30 | 1000 |
5 | Иван | 27 | 500 |
6 | Кирилл | 28 | 1000 |
Пример
Давайте выберем записи с id, НЕ равным 1, 3 и 5:
SELECT * FROM workers WHERE id NOT IN (1, 3, 5)
SQL запрос выберет следующие строки:
id айди |
name имя |
age возраст |
salary зарплата |
2 | Петя | 25 | 500 |
4 | Коля | 30 | 1000 |
6 | Кирилл | 28 | 1000 |
Пример
Давайте выберем записи с id, НЕ между 3 и 5:
SELECT * FROM workers WHERE id NOT BETWEEN 3 AND 5
SQL запрос выберет следующие строки:
id айди |
name имя |
age возраст |
salary зарплата |
1 | Дима | 23 | 400 |
2 | Петя | 25 | 500 |
6 | Кирилл | 28 | 1000 |
Команда IS NULL проверяет поле на не NULL.
См. также команду is null, которая проверяет поле на NULL.
Синтаксис
WHERE поле IS NOT NULL
Примеры
Все примеры будут по этой таблице workers, если не сказано иное:
id айди |
name имя |
age возраст |
salary зарплата |
1 | Дима | 23 | 400 |
2 | Петя | 24 | NULL |
3 | Вася | 25 | NULL |
Пример
Давайте выберем записи, у которых зарплата не равна NULL:
SELECT * FROM workers WHERE salary IS NOT NULL
SQL запрос выберет следующие строки:
id айди |
name имя |
age возраст |
salary зарплата |
1 | Дима | 23 | 400 |
Команда IS NULL проверяет поле на NULL.
См. также команду is not null, которая проверяет поле на не NULL.
Синтаксис
WHERE поле IS NULL
Примеры
Все примеры будут по этой таблице workers, если не сказано иное:
id айди |
name имя |
age возраст |
salary зарплата |
1 | Дима | 23 | 400 |
2 | Петя | 24 | NULL |
3 | Вася | 25 | NULL |
Пример
Давайте выберем записи, у которых зарплата равна NULL:
SELECT * FROM workers WHERE salary IS NULL
SQL запрос выберет следующие строки:
id айди |
name имя |
age возраст |
salary зарплата |
2 | Петя | 24 | NULL |
3 | Вася | 25 | NULL |
Команда GROUP BY позволяет группировать результаты при выборке из базы данных.
К сгруппированным результатам можно применять любые функции (смотрите примеры).
См. также команду having, которая позволяет накладывать условие на группы, созданные с помощью group by.
Синтаксис
SELECT * FROM имя_таблицы WHERE условие GROUP BY поле_для_группировки
Примеры
Все примеры будут по этой таблице workers, если не сказано иное:
id айди |
name имя |
age возраст |
salary зарплата |
1 | Дима | 23 | 100 |
2 | Петя | 23 | 200 |
3 | Вася | 23 | 300 |
4 | Коля | 24 | 1000 |
5 | Иван | 24 | 2000 |
6 | Кирилл | 25 | 1000 |
Пример
В данном примере записи группируются по возрасту (будет 3 группы — 23 года, 24 года и 25 лет). Затем для каждой группы применяется функция sum, которая суммирует зарплаты внутри данной группы.
В результате для каждой из групп (23 года, 24 года и 25 лет) будет подсчитана суммарная зарплата внутри этой группы:
SELECT age, SUM(salary) as sum FROM workers GROUP BY age
SQL запрос выберет следующие строки:
age возраст |
sum сумма |
23 | 600 |
24 | 3000 |
25 | 1000 |
Пример
В данном примере мы используем дополнительное условие where, чтобы взять не все записи из таблицы:
SELECT age, SUM(salary) as sum FROM workers WHERE id>=2 GROUP BY age
SQL запрос выберет следующие строки:
age возраст |
sum сумма |
23 | 500 |
24 | 3000 |
25 | 1000 |
Пример
В данном примере записи группируются по возрасту (будет 3 группы — 23 года, 24 года и 25 лет). Затем для каждой группы применяется функция max, которая находит максимальную зарплату внутри данной группы:
SELECT age, MAX(salary) as max FROM workers GROUP BY age
SQL запрос выберет следующие строки:
age возраст |
max максимальная зарплата |
23 | 300 |
24 | 2000 |
25 | 1000 |
Пример
А теперь с помощью функции min найдется минимальная зарплата внутри данной группы:
SELECT age, MIN(salary) as min FROM workers GROUP BY age
SQL запрос выберет следующие строки:
age возраст |
min минимальная зарплата |
23 | 100 |
24 | 1000 |
25 | 1000 |
Пример
А теперь с помощью функции count найдется количество записей в группе:
SELECT age, COUNT(*) as count FROM workers GROUP BY age
SQL запрос выберет следующие строки:
age возраст |
count количество |
23 | 3 |
24 | 2 |
25 | 1 |
Команда HAVING позволяет фильтровать результат группировки, сделанной с помощью команды group by.
См. также команду where, которая задает условие на выборку записей.
Синтаксис
GROUP BY поле HAVING условие
Примеры
Все примеры будут по этой таблице workers, если не сказано иное:
id айди |
name имя |
age возраст |
salary зарплата |
1 | Дима | 23 | 100 |
2 | Петя | 23 | 200 |
3 | Вася | 23 | 300 |
4 | Коля | 24 | 1000 |
5 | Иван | 24 | 2000 |
6 | Кирилл | 25 | 1000 |
Пример
В данном примере демонстрируется работа group by без условия having:
SELECT age, SUM(salary) as sum FROM workers GROUP BY age
SQL запрос выберет следующие строки:
age возраст |
sum сумма |
23 | 600 |
24 | 3000 |
25 | 1000 |
А теперь с помощью условия having оставим только те строки, в которых суммарная зарплата больше или равна 1000:
SELECT age, SUM(salary) as sum FROM workers GROUP BY age HAVING sum>=1000
SQL запрос выберет следующие строки:
age возраст |
sum сумма |
24 | 3000 |
25 | 1000 |
Пример
Подсчитаем с помощью функции count количество записей в группе (не используя having):
SELECT age, COUNT(*) as count FROM workers GROUP BY age
SQL запрос выберет следующие строки:
age возраст |
count количество |
23 | 3 |
24 | 2 |
25 | 1 |
А теперь с помощью условия having оставим только те группы, в которых количество строк меньше или равно двум:
SELECT age, COUNT(*) as count FROM workers GROUP BY age HAVING count<=2
SQL запрос выберет следующие строки:
age возраст |
count количество |
24 | 2 |
25 | 1 |
Аналогичного эффекта можно достигнуть, если воспользоваться командой in:
SELECT age, COUNT(*) as count FROM workers GROUP BY age HAVING count IN(1,2)
Можно также использовать команду between:
SELECT age, COUNT(*) as count FROM workers GROUP BY age HAVING count BETWEEN 1 AND 2
Как вы видите, в having допустимы все команды, используемые в условии where.
Функция CONCAT предназначена для сложения строк при выборке из базы данных. Строками обычно выступают поля таблиц.
См. также функцию concat_ws, которая складывает строки с использованием разделителя.
См. также функцию group_concat, которая складывает содержимое одного поля из разных строк.
Синтаксис
SELECT CONCAT(поле1, поле2…) FROM имя_таблицы WHERE условие
Примеры
Все примеры будут по этой таблице workers, если не сказано иное:
id айди |
name имя |
age возраст |
salary зарплата |
1 | Дима | 23 | 300 |
2 | Петя | 24 | 400 |
3 | Вася | 25 | 500 |
Пример
В данном примере при выборке из базы создается новое поле concat, в котором одновременно сольются 3 поля — age, name и salary:
SELECT *, CONCAT(age, name, salary) as concat FROM workers
SQL запрос выберет следующие строки:
id айди |
name имя |
age возраст |
salary зарплата |
concat объединенное поле |
1 | Дима | 23 | 300 | 23Дима300 |
2 | Петя | 24 | 400 | 24Петя400 |
3 | Вася | 25 | 500 | 25Вася500 |
Пример
Давайте добавим после name 3 восклицательных знака:
SELECT *, CONCAT(name, ‘!!!’) as name FROM workers
SQL запрос выберет следующие строки:
id айди |
name имя |
age возраст |
salary зарплата |
1 | Дима!!! | 23 | 300 |
2 | Петя!!! | 24 | 400 |
3 | Вася!!! | 25 | 500 |
Пример
Давайте добавим перед name 3 восклицательных знака, а после него — 3 вопросительных:
SELECT *, CONCAT(‘!!!’, name, ‘???’) as name FROM workers
SQL запрос выберет следующие строки:
id айди |
name имя |
age возраст |
salary зарплата |
1 | !!!Дима??? | 23 | 300 |
2 | !!!Петя??? | 24 | 400 |
3 | !!!Вася??? | 25 | 500 |
Функция CONCAT_WS предназначена для сложения строк при выборке из базы данных с использованием разделителя. Строками обычно выступают поля таблиц.
См. также функцию concat, которая складывает строки без использования разделителя.
См. также функцию group_concat, которая складывает содержимое одного поля из разных строк.
Синтаксис
SELECT CONCAT_WS(разделитель, поле1, поле2…) FROM имя_таблицы WHERE условие
Примеры
Все примеры будут по этой таблице workers, если не сказано иное:
id айди |
name имя |
age возраст |
salary зарплата |
1 | Дима | 23 | 300 |
2 | Петя | 24 | 400 |
3 | Вася | 25 | 500 |
Пример
В данном примере при выборке из базы создается новое поле concat_ws, в котором одновременно сольются через дефис 3 поля — age, name и salary:
SELECT *, CONCAT_WS(‘-‘, age, name, salary) as concat_ws FROM workers
SQL запрос выберет следующие строки:
id айди |
name имя |
age возраст |
salary зарплата |
concat_ws объединенное поле |
1 | Дима | 23 | 300 | 23-Дима-300 |
2 | Петя | 24 | 400 | 24-Петя-400 |
3 | Вася | 25 | 500 | 25-Вася-500 |
Пример
А теперь кроме полей из базы добавится еще и строка ‘!!!’:
SELECT *, CONCAT_WS(‘-‘, age, ‘!!!’, salary) as concat_ws FROM workers
SQL запрос выберет следующие строки:
id айди |
name имя |
age возраст |
salary зарплата |
concat_ws объединенное поле |
1 | Дима | 23 | 300 | 23-!!!-300 |
2 | Петя | 24 | 400 | 24-!!!-400 |
3 | Вася | 25 | 500 | 25-!!!-500 |
Меняем таблицу для примеров
Остальные примеры будут по этой таблице workers:
id айди |
name имя |
age возраст |
salary зарплата |
separator разделитель |
1 | Дима | 23 | 300 | — |
2 | Петя | 24 | 400 | @ |
3 | Вася | 25 | 500 | ! |
Пример
Разделителем может быть не только строка, но и поле таблицы. Давайте сделаем содержимое поля separator разделителем между age, name, salary:
SELECT *, CONCAT_WS(separator, age, name, salary) as concat_ws FROM workers
SQL запрос выберет следующие строки:
id айди |
name имя |
age возраст |
salary зарплата |
separator разделитель |
concat_ws объединенное поле |
1 | Дима | 23 | 300 | — | 23-Дима-300 |
2 | Петя | 24 | 400 | @ | 24@Петя@400 |
3 | Вася | 25 | 500 | ! | 25!Вася!500 |
Функция GROUP_CONCAT складывает (как строки) содержимое одного поля из разных строк, вставляя между ними разделитель (по умолчанию это запятая).
К примеру, можно получить список всех выбранных имен через запятую или другой разделитель.
Внимание: у этой функции есть ограничение на объем выводимых данных. По умолчанию 1024 символа для каждого объединения — для каждой выводимой строки. Если размер склеенных данных больше, то он будет урезаться.
Чтобы расширить размер нужно выполнить команду SET group_concat_max_len = 4096;
Если у вас есть привилегии, то вы расширите объем получаемых данных до 4096, можно и больше. Но чаще всего на обычных хостингах таких привилегий нет.
См. также команду group by, с помощью которой можно группировать строки для использования group_concat.
См. также функции concat и concat_ws которые складывают колонки одной строки.
Синтаксис
Без указания разделителя (по умолчанию это будет запятая):
SELECT GROUP_CONCAT(поле) FROM имя_таблицы WHERE условие
С указанием разделителя:
SELECT GROUP_CONCAT(поле SEPARATOR разделитель) FROM имя_таблицы WHERE условие
Примеры
Все примеры будут по этой таблице workers, если не сказано иное:
id айди |
name имя |
age возраст |
1 | Дима | 23 |
2 | Петя | 23 |
3 | Вася | 23 |
4 | Коля | 24 |
5 | Иван | 24 |
6 | Кирилл | 25 |
Пример
В данном примере запрос находит все имена в таблицы и выводит их через запятую:
SELECT GROUP_CONCAT(name) as name FROM workers
SQL запрос выберет следующие строки:
name имена |
Дима,Петя,Вася,Коля,Иван,Кирилл |
Пример
В данном примере разделитель меняется на ‘+’ с помощью команды separator:
SELECT GROUP_CONCAT(name SEPARATOR ‘+’) as name FROM workers
SQL запрос выберет следующие строки:
name имена |
Дима+Петя+Вася+Коля+Иван+Кирилл |
Пример
В данном примере с помощью команды where выбираются не все строки, а заданные:
SELECT GROUP_CONCAT(name) as name FROM workers WHERE id>=3 AND id<=5
SQL запрос выберет следующие строки:
name имена |
Вася,Коля,Иван |
Пример
В данном примере с помощью команды group by строки группируются по возрасту и для каждой группы через запятую выводятся имена работников с таким возрастом:
SELECT age, GROUP_CONCAT(name) as name FROM workers GROUP BY age
SQL запрос выберет следующие строки:
age возраст |
name имена |
23 | Дима,Петя,Вася |
24 | Коля,Иван |
25 | Кирилл |
Пример
Поменяем разделитель на ‘-‘:
SELECT age, GROUP_CONCAT(name SEPARATOR ‘-‘) as name FROM workers GROUP BY age
SQL запрос выберет следующие строки:
age возраст |
name имена |
23 | Дима-Петя-Вася |
24 | Коля-Иван |
25 | Кирилл |
Команда UNION объединяет данные из нескольких таблиц в одну при выборке.
При объединении количество столбцов во всех таблицах должно совпадать, иначе будет ошибка
Имена столбцов будут такие же, как в основной таблице, в которую добавляются данные из других таблиц.
Внимание: если не используется ключевое слово ALL для UNION, все возвращенные строки будут уникальными, так как по умолчанию подразумевается distinct, который удаляет неуникальные значения.
Чтобы отменить такое поведение — нужно указать ключевое слово ALL, вот так: UNION ALL.
См. также команду join, которая объединяет связанные таблицы.
Синтаксис
С удалением дублей:
SELECT * FROM имя_таблицы1 WHERE условие
UNION SELECT * FROM имя_таблицы2 WHERE условие
Без удаления дублей:
SELECT * FROM имя_таблицы1 WHERE условие
UNION ALL SELECT * FROM имя_таблицы2 WHERE условие
Можно объединять не две таблицы, а три или более:
SELECT * FROM имя_таблицы1 WHERE условие
UNION SELECT * FROM имя_таблицы2 WHERE условие
UNION SELECT * FROM имя_таблицы3 WHERE условие
UNION SELECT * FROM имя_таблицы4 WHERE условие
Примеры
Все примеры будут по таблицам countries и cities, если не сказано иное.
Таблица countries:
id айди |
name название |
1 | Беларусь |
2 | Россия |
3 | Украина |
Таблица cities:
id айди |
name название |
country_id айди страны |
1 | Минск | 1 |
2 | Минск | 1 |
3 | Москва | 2 |
4 | Киев | 3 |
Пример
В данном примере объединяются записи из двух таблиц:
SELECT id, name FROM countries UNION ALL SELECT id, name FROM cities
SQL запрос выберет следующие строки:
id айди |
name название |
1 | Беларусь |
2 | Россия |
3 | Украина |
1 | Минск |
2 | Минск |
3 | Москва |
4 | Киев |
Пример
В данном примере отсутствует ключевое слово ALL, однако дубли не будут удалены, так как дублями считается полное совпадение строк:
SELECT id, name FROM countries UNION SELECT id, name FROM cities
SQL запрос выберет следующие строки:
id айди |
name название |
1 | Беларусь |
2 | Россия |
3 | Украина |
1 | Минск |
2 | Минск |
3 | Москва |
4 | Киев |
Пример
А вот теперь дубли будут удалены (из двух Минсков останется один), так как будет иметь место полное совпадение строк (потому что поле осталось одно, но это не обязательно):
SELECT name FROM countries UNION SELECT name FROM cities
SQL запрос выберет следующие строки:
name название |
Беларусь |
Россия |
Украина |
Минск |
Москва |
Киев |
Пример
А теперь добавим слово ALL — и дубли не будут удалятся:
SELECT name FROM countries UNION ALL SELECT name FROM cities
SQL запрос выберет следующие строки:
name название |
Беларусь |
Россия |
Украина |
Минск |
Минск |
Москва |
Киев |
Пример
В данном примере демонстрируется работа условий where в комбинации с union:
SELECT id, name FROM countries WHERE id>=2
UNION SELECT id, name FROM cities WHERE id<=2
SQL запрос выберет следующие строки:
id айди |
name имя |
2 | Россия |
3 | Украина |
1 | Минск |
2 | Минск |
Пример
Имена колонок берутся из первой таблицы (то есть имена колонок таблиц, подключенных через union нигде себя не проявят):
SELECT id as country_id, name as country_name FROM countries
UNION SELECT id, name FROM cities
SQL запрос выберет следующие строки:
country_id айди |
country_name имя |
|
1 | Беларусь | |
2 | Россия | |
3 | Украина | |
1 | Минск | 1 |
2 | Минск | 1 |
3 | Москва | 2 |
4 | Киев | 3 |
Пример
Такой запрос выдаст ошибку, так как в таблицах не совпадает количество колонок:
SELECT id, name FROM countries UNION SELECT id, name, country_id FROM cities
И такой запрос тоже выдаст ошибку в нашем случае — количество колонок в обеих таблицах не совпадает:
SELECT * FROM countries UNION SELECT * FROM cities
Если нам очень надо забрать из какой-либо таблицы столько полей, что в другой таблице столько и нет, можно создавать дополнительные поля вручную.
К примеру, мы хотим забрать 3 поля из второй таблицы, а в первой таблице полей только 2. Решим эту проблему создав поле с именем country_id и содержимым 0 для первой таблицы (вот так: 0 as country_id):
SELECT id, name, 0 as country_id FROM countries
UNION SELECT id, name, country_id FROM cities
SQL запрос выберет следующие строки:
id айди |
name имя |
country_id айди страны |
1 | Беларусь | 0 |
2 | Россия | 0 |
3 | Украина | 0 |
1 | Минск | 1 |
2 | Минск | 1 |
3 | Москва | 2 |
4 | Киев | 3 |
Команды JOIN, INNER JOIN, LEFT JOIN, RIGHT JOIN используются для связывания таблиц по определенным полям связи.
Синтаксис
SELECT поля FROM имя_таблицы
LEFT JOIN имя_связанной_таблицы ON условие_связи
WHERE условие_выборки
Примеры
Все примеры будут по таблицам countries и cities, если не сказано иное.
Таблица countries:
id айди |
name имя |
1 | Беларусь |
2 | Россия |
3 | Украина |
Таблица cities:
id айди |
name имя |
country_id айди страны |
1 | Минск | 1 |
2 | Витебск | 1 |
3 | Москва | 2 |
4 | Питер | 2 |
5 | Лондон | 0 |
Пример . LEFT JOIN
В данном примере …:
SELECT
cities.id as city_id, cities.name as city_name, cities.country_id as city_country_id,
countries.id as country_id, countries.name as country_name
FROM cities
LEFT JOIN countries ON countries.id=cities.country_id
SQL запрос выберет следующие строки:
city_id айди города |
city_name название города |
city_country_id айди страны |
country_id айди страны |
country_name название страны |
1 | Минск | 1 | 1 | Беларусь |
2 | Витебск | 1 | 1 | Беларусь |
3 | Москва | 2 | 2 | Россия |
4 | Питер | 2 | 2 | Россия |
5 | Лондон | 0 | NULL |
Пример . RIGHT JOIN
В данном примере … Лондон не выберется, а Украина наоборот
SELECT
cities.id as city_id, cities.name as city_name, cities.country_id as city_country_id,
countries.id as country_id, countries.name as country_name
FROM cities
RIGHT JOIN countries ON countries.id=cities.country_id
SQL запрос выберет следующие строки:
city_id айди города |
city_name название города |
city_country_id айди страны |
country_id айди страны |
country_name название страны |
1 | Минск | 1 | 1 | Беларусь |
2 | Витебск | 1 | 1 | Беларусь |
3 | Москва | 2 | 2 | Россия |
4 | Питер | 2 | 2 | Россия |
NULL | NULL | NULL | 3 | Украина |
Пример . INNER JOIN
В данном примере … Лондон и Украина не выберется
SELECT
cities.id as city_id, cities.name as city_name, cities.country_id as city_country_id,
countries.id as country_id, countries.name as country_name
FROM cities
INNER JOIN countries ON countries.id=cities.country_id
SQL запрос выберет следующие строки:
city_id айди города |
city_name название города |
city_country_id айди страны |
country_id айди страны |
country_name название страны |
1 | Минск | 1 | 1 | Беларусь |
2 | Витебск | 1 | 1 | Беларусь |
3 | Москва | 2 | 2 | Россия |
4 | Питер | 2 | 2 | Россия |
Команда LEFT JOIN используются для связывания таблиц по определенным полям связи.
Синтаксис
SELECT поля FROM имя_таблицы
LEFT JOIN имя_связанной_таблицы ON условие_связи
WHERE условие_выборки
Примеры
Все примеры будут по таблицам countries и cities, если не сказано иное.
Таблица countries:
id айди |
name имя |
1 | Беларусь |
2 | Россия |
3 | Украина |
Таблица cities:
id айди |
name имя |
country_id айди страны |
1 | Минск | 1 |
2 | Витебск | 1 |
3 | Москва | 2 |
4 | Владивосток | 2 |
6 | Лондон | 0 |
Пример
В данном примере …:
SELECT
cities.id as city_id, cities.name as city_name, cities.country_id as city_country_id,
countries.id as country_id, countries.name as country_name
FROM cities
LEFT JOIN countries ON countries.id=cities.country_id
SQL запрос выберет следующие строки:
city_id айди города |
city_name название города |
city_country_id айди страны |
country_id айди страны |
country_name название страны |
1 | Минск | 1 | 1 | Беларусь |
2 | Витебск | 1 | 1 | Беларусь |
3 | Москва | 2 | 2 | Россия |
4 | Владивосток | 2 | 2 | Россия |
6 | Лондон | 0 | NULL |
Пример
В данном примере …:
SELECT
cities.id as city_id, cities.name as city_name, cities.country_id as city_country_id,
countries.id as country_id, countries.name as country_name
FROM cities
LEFT JOIN countries ON countries.id=cities.country_id
WHERE countries.id>=2
SQL запрос выберет следующие строки:
city_id айди города |
city_name название города |
city_country_id айди страны |
country_id айди страны |
country_name название страны |
3 | Москва | 2 | 2 | Россия |
4 | Владивосток | 2 | 2 | Россия |
Команда RIGHT JOIN используется для связывания таблиц по определенным полям связи.
Синтаксис
SELECT поля FROM имя_таблицы
RIGHT JOIN имя_связанной_таблицы ON условие_связи
WHERE условие_выборки
Примеры
Все примеры будут по таблицам countries и cities, если не сказано иное.
Таблица countries:
id айди |
name имя |
1 | Беларусь |
2 | Россия |
3 | Украина |
Таблица cities:
id айди |
name имя |
country_id айди страны |
1 | Минск | 1 |
2 | Витебск | 1 |
3 | Москва | 2 |
4 | Владивосток | 2 |
6 | Лондон | 0 |
Команда INNER JOIN используются для связывания таблиц по определенным полям связи.
Синтаксис
SELECT поля FROM имя_таблицы
INNER JOIN имя_связанной_таблицы ON условие_связи
WHERE условие_выборки
Примеры
Все примеры будут по таблицам countries и cities, если не сказано иное.
Таблица countries:
id айди |
name имя |
1 | Беларусь |
2 | Россия |
3 | Украина |
Таблица cities:
id айди |
name имя |
country_id айди страны |
1 | Минск | 1 |
2 | Витебск | 1 |
3 | Москва | 2 |
4 | Владивосток | 2 |
6 | Лондон | 0 |
Пример
В данном примере … Лондон и Украина не выберется
SELECT
cities.id as city_id, cities.name as city_name, cities.country_id as city_country_id,
countries.id as country_id, countries.name as country_name
FROM cities
INNER JOIN countries ON countries.id=cities.country_id
SQL запрос выберет следующие строки:
city_id айди города |
city_name название города |
city_country_id айди страны |
country_id айди страны |
country_name название страны |
1 | Минск | 1 | 1 | Беларусь |
2 | Витебск | 1 | 1 | Беларусь |
3 | Москва | 2 | 2 | Россия |
4 | Владивосток | 2 | 2 | Россия |
Команда SELECT INTO копирует данные из одной таблицы в другую.
См. также команду insert, которая вставляет записи в таблицу.
Синтаксис
Обычное применение:
SELECT * INTO в_какую_таблицу FROM из_какой_таблицы WHERE условие
Можно копировать и в другую базу данных:
SELECT * INTO в_какую_таблицу IN другая_база_данных FROM из_какой_таблицы WHERE условие
Условие where не является обязательным, если его не указать — будут выбраны все записи.
Команду select into можно использовать для того, чтобы создать новую пустую таблицу по образцу старой. Для этого в where нужно передать условие, которое не выберет ни одной записи:
SELECT * INTO новая_таблица FROM старая_таблица WHERE 1=0
Примеры
Все примеры будут по таблицам countries1 и countries2, если не сказано иное.
Таблица countries1:
id айди |
name имя |
1 | Беларусь |
2 | Россия |
3 | Украина |
Таблица countries2:
id айди |
name имя |
1 | Испания |
Пример
В данном примере данные копируются из таблицы countries1 и вставляются в countries2:
SELECT * INTO countries2 FROM countries1
Таблица countries2 станет выглядеть так:
id айди |
name имя |
1 | Испания |
2 | Беларусь |
3 | Россия |
4 | Украина |
Функция LENGTH используется для подсчета количества символов в строках.
Вместо length можно использовать следующие названия: octet_length, char_length, character_length.
Существует также функция bit_length, которая возвращает длину в битах.
Синтаксис
SELECT LENGTH(поле) FROM имя_таблицы WHERE условие
Примеры
Все примеры будут по этой таблице workers, если не сказано иное:
id айди |
name имя |
1 | Дмитрий |
2 | Кирилл |
3 | Владимир |
Пример
В данном примере создается дополнительное поле, которое содержит длину поля name:
SELECT *, LENGTH(name) as length FROM workers
SQL запрос выберет следующие строки:
id айди |
name имя |
length длина строки |
1 | Дмитрий | 7 |
2 | Кирилл | 6 |
3 | Владимир | 8 |
Пример
В данном примере с помощью условия where выбираются только те записи, в которых длина поля name больше или равна 7:
SELECT *, LENGTH(name) as length FROM workers WHERE LENGTH(name)>=7
SQL запрос выберет следующие строки:
id айди |
name имя |
length длина строки |
1 | Дмитрий | 7 |
3 | Владимир | 8 |
Пример
Конечно, не обязательно делать поле length, чтобы применить функцию length в условии:
SELECT * FROM workers WHERE LENGTH(name)>=7
SQL запрос выберет следующие строки:
id айди |
name имя |
1 | Дмитрий |
3 | Владимир |
Функция LEFT вырезает и возвращает заданное количество символов с начала строки.
См. также функцию right, которая вырезает символы с конца строки.
См. также функции substring и mid которые вырезают символы с любого места строки.
См. также функцию substring_index, которая берет часть строки по указанному разделителю.
Синтаксис
SELECT LEFT(поле, сколько_символов_взять) FROM имя_таблицы WHERE условие
Примеры
Все примеры будут по этой таблице texts, если не сказано иное:
id айди |
text текст |
1 | Первый длинный текст с номером 1! |
2 | Второй длинный текст с номером 2! |
Пример
Давайте вырежем первые 6 символов с начала строки:
SELECT id, LEFT(text, 6) as text FROM texts
SQL запрос выберет следующие строки:
id айди |
text текст |
1 | Первый |
2 | Второй |
Пример
Давайте вырежем первые 6 символов с начала строки и добавим троеточие в конец, используя функцию concat:
SELECT id, CONCAT(LEFT(text, 6), ‘…’) as text FROM texts
SQL запрос выберет следующие строки:
id айди |
text текст |
1 | Первый… |
2 | Второй… |
Функция RIGHT вырезает и возвращает заданное количество символов с конца строки.
См. также функцию left, которая вырезает символы с начала строки.
См. также функции substring и mid которые вырезают символы с любого места строки.
См. также функцию substring_index, которая берет часть строки по указанному разделителю.
Синтаксис
SELECT RIGHT(поле, сколько_символов_взять) FROM имя_таблицы WHERE условие
Примеры
Все примеры будут по этой таблице texts, если не сказано иное:
id айди |
text текст |
1 | Первый длинный текст с номером 1! |
2 | Второй длинный текст с номером 2! |
Пример
Давайте вырежем и выведем 10 символов с конца строки:
SELECT id, RIGHT(text, 10) as text FROM texts
SQL запрос выберет следующие строки:
id айди |
text текст |
1 | номером 1 |
2 | номером 2 |
Пример
Давайте вырежем и выведем 10 символов с конца строки и перед ними добавим троеточие, используя функцию concat:
SELECT id, CONCAT(‘…’, RIGHT(text, 10)) as text FROM texts
SQL запрос выберет следующие строки:
id айди |
text текст |
1 | …номером 1 |
2 | …номером 2 |
Функция SUBSTRING вырезает и возвращает заданное количество символов из строки.
Первым параметром функция принимает поле или строку, вторым параметром — с какой позиции начинать вырезания (нумерация символов начинается с 1), третьем параметром — сколько символов брать.
Третий параметр не является обязательным. Если он не указан, текст будет вырезан с указанной позиции и до конца строки.
См. также функцию mid, которая также вырезает часть строки.
См. также функцию substring_index, которая берет часть строки по указанному разделителю.
Синтаксис
Первый синтаксис:
SELECT SUBSTRING(поле, откуда_отрезать, сколько_символов_взять) FROM имя_таблицы WHERE условие
Альтернативный синтаксис:
SELECT SUBSTRING(поле FROM откуда_отрезать FOR сколько_символов_взять) FROM имя_таблицы WHERE условие
Третий параметр не обязателен, в этом случае текст будет вырезан с указанной позиции и до конца строки:
SELECT SUBSTRING(поле, откуда_отрезать) FROM имя_таблицы WHERE условие
SELECT SUBSTRING(поле FROM откуда_отрезать) FROM имя_таблицы WHERE условие
Примеры
Все примеры будут по этой таблице texts, если не сказано иное:
id айди |
text текст |
1 | Это первый длинный текст! |
2 | Это второй длинный текст! |
Пример
В данном примере из строки вырезаются и возвращаются 6 символов, начиная с 5-го:
SELECT id, SUBSTRING(text, 5, 6) as text FROM texts
SQL запрос выберет следующие строки:
id айди |
text текст |
1 | первый |
2 | второй |
Запрос можно переписать в следующем виде:
SELECT id, SUBSTRING(text FROM 5 FOR 6) as text FROM texts
Пример
В данном примере возвращается вся строка до конца, начиная с пятого символа:
SELECT id, SUBSTRING(text, 5) as text FROM texts
SQL запрос выберет следующие строки:
id айди |
text текст |
1 | первый длинный текст! |
2 | второй длинный текст! |
Запрос можно переписать в следующем виде:
SELECT id, SUBSTRING(text FROM 5) as text FROM texts
Функция MID вырезает и возвращает заданное количество символов из строки.
Первым параметром функция принимает поле или строку, вторым параметром — с какой позиции начинать вырезания (нумерация символов начинается с 1), третьем параметром — сколько символов брать.
Третий параметр не является обязательным. Если он не указан, текст будет вырезан с указанной позиции и до конца строки.
См. также функцию substring, которая также вырезает часть строки.
См. также функцию substring_index, которая берет часть строки по указанному разделителю.
Синтаксис
С тремя параметрами:
SELECT MID(поле, откуда_отрезать, сколько_символов_взять) FROM имя_таблицы WHERE условие
Третий параметр не обязателен:
SELECT MID(поле, откуда_отрезать) FROM имя_таблицы WHERE условие
Примеры
Все примеры будут по этой таблице texts, если не сказано иное:
id айди |
text текст |
1 | Это первый длинный текст! |
2 | Это второй длинный текст! |
Пример
В данном примере из строки вырезаются и возвращаются 6 символов, начиная с 5-го:
SELECT id, MID(text, 5, 6) as text FROM texts
SQL запрос выберет следующие строки:
id айди |
text текст |
1 | первый |
2 | второй |
Пример
В данном примере возвращается вся строка до конца, начиная с пятого символа:
SELECT id, MID(text, 5) as text FROM texts
SQL запрос выберет следующие строки:
id айди |
text текст |
1 | первый длинный текст! |
2 | второй длинный текст! |
Функция SUBSTRING_INDEX возвращает подстроку из строки перед появлениям N вхождений разделителя.
Если N положителен, то возвращается все, что находится слева от последнего разделителя (считая слева). Если N отрицателен, то возвращается все, что находится справа от последнего разделителя (считая справа).
См. также функцию left, которая вырезает символы с начала строки.
См. также функцию right, которая вырезает символы с конца строки.
См. также функции substring и mid которые вырезают символы с любого места строки.
Синтаксис
SELECT SUBSTRING_INDEX(поле, разделитель, количество_разделителей)
FROM имя_таблицы WHERE условие
Примеры
Все примеры будут по этой таблице texts, если не сказано иное:
id айди |
text текст |
1 | слово1-слово2-слово3-слово4-слово5 |
2 | word1-word2-word3-word4-word5 |
Пример
В данном примере вернется подстрока перед первым вхождением разделителя ‘-‘:
SELECT *, SUBSTRING_INDEX(text, ‘-‘, 1) as text FROM texts
SQL запрос выберет следующие строки:
id айди |
text текст |
1 | слово1 |
2 | word1 |
Пример
В данном примере вернется подстрока перед вторым вхождением разделителя ‘-‘:
SELECT *, SUBSTRING_INDEX(text, ‘-‘, 2) as text FROM texts
SQL запрос выберет следующие строки:
id айди |
text текст |
1 | слово1-слово2 |
2 | word1-word2 |
Пример
В данном примере вернется подстрока перед третьим вхождением разделителя ‘-‘:
SELECT *, SUBSTRING_INDEX(text, ‘-‘, 3) as text FROM texts
SQL запрос выберет следующие строки:
id айди |
text текст |
1 | слово1-слово2-слово3 |
2 | word1-word2-word3 |
Пример
В данном примере вернется подстрока перед первым с конца вхождением разделителя ‘-‘:
SELECT *, SUBSTRING_INDEX(text, ‘-‘, -1) as text FROM texts
SQL запрос выберет следующие строки:
id айди |
text текст |
1 | слово5 |
2 | word5 |
Пример
В данном примере вернется подстрока перед вторым с конца вхождением разделителя ‘-‘:
SELECT *, SUBSTRING_INDEX(text, ‘-‘, -2) as text FROM texts
SQL запрос выберет следующие строки:
id айди |
text текст |
1 | слово4-слово5 |
2 | word4-word5 |
Пример
В данном примере вернется подстрока перед третьим с конца вхождением разделителя ‘-‘:
SELECT *, SUBSTRING_INDEX(text, ‘-‘, -3) as text FROM texts
SQL запрос выберет следующие строки:
id айди |
text текст |
1 | слово3-слово4-слово5 |
2 | word3-word4-word5 |
Функция REPLACE позволяет производить поиск и замену одних частей строки на другие.
См. также функции position, locate и instr, которые осуществляют поиск по строке.
Синтаксис
SELECT REPLACE(поле, что_менять, на_что_менять) FROM имя_таблицы WHERE условие
Примеры
Все примеры будут по этой таблице texts, если не сказано иное:
id айди |
text текст |
1 | Первый длинный текст! |
2 | Второй длинный текст! |
Пример
В данном примере все пробелы в тексте будут замены на дефис:
SELECT id, REPLACE(text, ‘ ‘, ‘-‘) as text FROM texts
SQL запрос выберет следующие строки:
id айди |
text текст |
1 | Первый-длинный-текст! |
2 | Второй-длинный-текст! |
Функция LPAD дополняет строку до нужного размера добавляя заданные символы в начало строки.
См. также функцию rpad, которая дополняет строку справа до заданного размера.
Синтаксис
SELECT LPAD(поле, новый_размер_поля, чем_дополнить) FROM имя_таблицы WHERE условие
Примеры
Все примеры будут по этой таблице texts, если не сказано иное:
id айди |
text текст |
1 | текст1 |
2 | текст2 |
2 | длинный текст3 |
Пример
В данном примере в текст добавляет символ * так, чтобы длина строки стала 10:
SELECT id, LPAD(text, 10, ‘*’) as text FROM texts
SQL запрос выберет следующие строки:
id айди |
text текст |
1 | ****текст1 |
2 | ****текст2 |
2 | длинный те |
Функция RPAD дополняет строку до нужного размера добавляя заданные символы в конец строки.
См. также функцию lpad, которая дополняет строку слева до заданного размера.
Синтаксис
SELECT RPAD(поле, новый_размер_поля, чем_дополнить) FROM имя_таблицы WHERE условие
Примеры
Все примеры будут по этой таблице texts, если не сказано иное:
id айди |
text текст |
1 | текст1 |
2 | текст2 |
2 | длинный текст3 |
Пример
В данном примере в текст добавляет символ * так, чтобы длина строки стала 10:
SELECT id, RPAD(text, 10, ‘*’) as text FROM texts
SQL запрос выберет следующие строки:
id айди |
text текст |
1 | текст1**** |
2 | текст2**** |
2 | длинный те |
Функция REVERSE переворачивает заданную строку так, чтобы ее символы шли в обратном порядке
Синтаксис
SELECT REVERSE(поле) FROM имя_таблицы WHERE условие
Примеры
Все примеры будут по этой таблице texts, если не сказано иное:
id айди |
text текст |
1 | 12345 |
2 | abcde |
Пример
В данном примере символы текста при выборке будут идти в обратном порядке:
SELECT id, REVERSE(text) as text FROM texts
SQL запрос выберет следующие строки:
id айди |
text текст |
1 | 54321 |
2 | edcba |
Функция REPEAT повторяет заданную строку нужное количество раз.
Синтаксис
SELECT REPEAT(поле, количество_повторений) FROM имя_таблицы WHERE условие
Примеры
Все примеры будут по этой таблице texts, если не сказано иное:
id айди |
text текст |
1 | текст1 |
2 | текст2 |
Пример
В данном примере текст поля при выборке повторится 3 раза:
SELECT id, REPEAT(text, 3) as text FROM texts
SQL запрос выберет следующие строки:
id айди |
text текст |
1 | текст1текст1текст1 |
2 | текст2текст2текст2 |
Функция POSITION осуществляет поиск подстроки в строке, возвращает позицию ее первого символа.
Учтите, что нумерация символов начинается с 1.
См. функции locate и instr, которые также осуществляют поиск по строке.
Синтаксис
SELECT POSITION(что_ищем IN поле) FROM имя_таблицы WHERE условие
Примеры
Все примеры будут по этой таблице texts, если не сказано иное:
id айди |
text текст |
1 | Очень длинный текст! |
2 | Не очень длинный текст! |
3 | Просто текст! |
Пример
В данном примере в тексте ищется позиция слова ‘длинный’:
SELECT *, POSITION(‘длинный’ IN text) as pos FROM texts
SQL запрос выберет следующие строки:
id айди |
text текст |
pos позиция подстроки |
1 | Очень длинный текст! | 7 |
2 | Не очень длинный текст! | 10 |
3 | Просто текст! | 0 |
Функция LOCATE осуществляет поиск подстроки в строке, возвращает позицию ее первого символа.
Учтите, что нумерация символов начинается с 1.
В отличие от функции POSITION функция LOCATE может начинать поиск не с начала строки, а с определенного места.
См. функции position и instr, которые также осуществляют поиск по строке.
Синтаксис
SELECT LOCATE(что_ищем, поле) FROM имя_таблицы WHERE условие
SELECT LOCATE(что_ищем, поле, начало_поиска) FROM имя_таблицы WHERE условие
Примеры
Все примеры будут по этой таблице texts, если не сказано иное:
id айди |
text текст |
1 | Очень длинный текст! |
2 | Не очень длинный текст! |
3 | Просто текст! |
Пример
В данном примере в тексте ищется позиция слова ‘длинный’:
SELECT *, LOCATE(‘длинный’, text) as pos FROM texts
SQL запрос выберет следующие строки:
id айди |
text текст |
pos позиция подстроки |
1 | Очень длинный текст! | 7 |
2 | Не очень длинный текст! | 10 |
3 | Просто текст! | 0 |
Пример
В данном примере в тексте ищется позиция слова ‘длинный’, поиск начинается с 8-го символа строки:
SELECT *, LOCATE(‘длинный’, text, 8) as pos FROM texts
SQL запрос выберет следующие строки:
id айди |
text текст |
pos позиция подстроки |
1 | Очень длинный текст! | 0 |
2 | Не очень длинный текст! | 10 |
3 | Просто текст! | 0 |
Функция INSTR осуществляет поиск подстроки в строке, возвращает позицию ее первого символа.
Учтите, что нумерация символов начинается с 1.
В отличие от функции position функция instr имеет обратный порядок параметров.
См. функции position и locate, которые также осуществляют поиск по строке.
Синтаксис
SELECT INSTR(поле, что_ищем) FROM имя_таблицы WHERE условие
Примеры
Все примеры будут по этой таблице texts, если не сказано иное:
id айди |
text текст |
1 | Очень длинный текст! |
2 | Не очень длинный текст! |
3 | Просто текст! |
Пример
В данном примере в тексте ищется позиция слова ‘длинный’:
SELECT *, INSTR(text, ‘длинный’) as pos FROM texts
SQL запрос выберет следующие строки:
id айди |
text текст |
pos позиция подстроки |
1 | Очень длинный текст! | 7 |
2 | Не очень длинный текст! | 10 |
3 | Просто текст! | 0 |
Функция TRIM обрезает пробелы по краям строки.
См. команды lrim и rtrim, которая также обрезают пробелы.
Синтаксис
При выборке:
SELECT TRIM(поле) FROM имя_таблицы WHERE условие
При вставке:
INSERT INTO имя_таблицы SET имя_поля=TRIM(значение_поля)
Примеры
Все примеры будут по этой таблице workers, если не сказано иное. Подчеркивание имитирует пробелы:
id айди |
name имя |
age возраст |
salary зарплата |
1 | ___Дима___ | 23 | 300 |
2 | ___Петя___ | 24 | 400 |
3 | ___Вася___ | 25 | 500 |
Пример
В данном примере при выборке будут удалены пробелы по краям строки:
SELECT *, TRIM(поле) as name FROM workers
SQL запрос выберет следующие строки:
id айди |
name имя |
age возраст |
salary зарплата |
1 | Дима | 23 | 300 |
2 | Петя | 24 | 400 |
3 | Вася | 25 | 500 |
Пример
В данном примере при вставке будут удалены пробелы по краям строки (подчеркивание имитирует пробелы):
INSERT INTO workers SET name=TRIM(‘ Кирилл ‘), age=26, salary=600
Таблица workers станет выглядеть так:
id айди |
name имя |
age возраст |
salary зарплата |
1 | ___Дима___ | 23 | 300 |
2 | ___Петя___ | 24 | 400 |
3 | ___Вася___ | 25 | 500 |
4 | Кирилл | 26 | 600 |
Функция LTRIM обрезает пробелы, которые стоят в начале строки.
См. команды trim и rtrim, которая также обрезают пробелы.
Синтаксис
При выборке:
SELECT LTRIM(поле) FROM имя_таблицы WHERE условие
При вставке:
INSERT INTO имя_таблицы SET имя_поля=LTRIM(значение_поля)
Примеры
Все примеры будут по этой таблице workers, если не сказано иное. Подчеркивание имитирует пробелы:
id айди |
name имя |
age возраст |
salary зарплата |
1 | ___Дима___ | 23 | 300 |
2 | ___Петя___ | 24 | 400 |
3 | ___Вася___ | 25 | 500 |
Пример
В данном примере при выборке будут удалены пробелы слева:
SELECT *, LTRIM(поле) as name FROM workers
SQL запрос выберет следующие строки:
id айди |
name имя |
age возраст |
salary зарплата |
1 | Дима___ | 23 | 300 |
2 | Петя___ | 24 | 400 |
3 | Вася___ | 25 | 500 |
Пример
В данном примере при вставке будут удалены пробелы слева (подчеркивание имитирует пробелы):
INSERT INTO workers SET name=LTRIM(‘ Кирилл ‘), age=26, salary=600
Таблица workers станет выглядеть так:
id айди |
name имя |
age возраст |
salary зарплата |
1 | ___Дима___ | 23 | 300 |
2 | ___Петя___ | 24 | 400 |
3 | ___Вася___ | 25 | 500 |
4 | Кирилл___ | 26 | 600 |
Функция RTRIM обрезает пробелы, которые стоят в конце строки.
См. команды trim и ltrim, которая также обрезают пробелы.
Синтаксис
При выборке:
SELECT RTRIM(поле) FROM имя_таблицы WHERE условие
При вставке:
INSERT INTO имя_таблицы SET имя_поля=RTRIM(значение_поля)
Примеры
Все примеры будут по этой таблице workers, если не сказано иное. Подчеркивание имитирует пробелы:
id айди |
name имя |
age возраст |
salary зарплата |
1 | ___Дима___ | 23 | 300 |
2 | ___Петя___ | 24 | 400 |
3 | ___Вася___ | 25 | 500 |
Пример
В данном примере при выборке будут удалены пробелы справа:
SELECT *, RTRIM(поле) as name FROM workers
SQL запрос выберет следующие строки:
id айди |
name имя |
age возраст |
salary зарплата |
1 | ___Дима | 23 | 300 |
2 | ___Петя | 24 | 400 |
3 | ___Вася | 25 | 500 |
Пример
В данном примере при вставке будут удалены пробелы справа (подчеркивание имитирует пробелы):
INSERT INTO workers SET name=RTRIM(‘ Кирилл ‘), age=26, salary=600
Таблица workers станет выглядеть так:
id айди |
name имя |
age возраст |
salary зарплата |
1 | ___Дима___ | 23 | 300 |
2 | ___Петя___ | 24 | 400 |
3 | ___Вася___ | 25 | 500 |
4 | ___Кирилл | 26 | 600 |
Функция SPACE создает строку, состоящую из заданного количества пробелов.
Синтаксис
SELECT SPACE(количество_пробелов) FROM имя_таблицы WHERE условие
Функция LCASE (LOWER) переводит строку в нижний регистр (то есть из больших букв делает маленькие).
См. также команду ucase (upper), которая переводит строку в нижний регистр.
Синтаксис
SELECT LCASE(поле) FROM имя_таблицы WHERE условие
SELECT LOWER(поле) FROM имя_таблицы WHERE условие
Примеры
Все примеры будут по этой таблице workers, если не сказано иное. Подчеркивание имитирует пробелы:
id айди |
name имя |
age возраст |
salary зарплата |
1 | Дима | 23 | 300 |
2 | Петя | 24 | 400 |
3 | Вася | 25 | 500 |
Пример
В данном примере строка name преобразуется к нижнему регистру с помощью lcase:
SELECT *, LCASE(name) as name FROM workers
SQL запрос выберет следующие строки:
id айди |
name имя |
age возраст |
salary зарплата |
1 | дима | 23 | 300 |
2 | петя | 24 | 400 |
3 | вася | 25 | 500 |
Пример
В данном примере строка name преобразуется к нижнему регистру с помощью lower:
SELECT *, LOWER(name) as name FROM workers
SQL запрос выберет следующие строки:
id айди |
name имя |
age возраст |
salary зарплата |
1 | дима | 23 | 300 |
2 | петя | 24 | 400 |
3 | вася | 25 | 500 |
Функция UCASE (UPPER) переводит строку в верхний регистр (то есть из маленьких букв делает большие).
См. также команду lcase (lower), которая переводит строку в нижний регистр.
Синтаксис
SELECT UCASE(поле) FROM имя_таблицы WHERE условие
SELECT UPPER(поле) FROM имя_таблицы WHERE условие
Примеры
Все примеры будут по этой таблице workers, если не сказано иное. Подчеркивание имитирует пробелы:
id айди |
name имя |
age возраст |
salary зарплата |
1 | Дима | 23 | 300 |
2 | Петя | 24 | 400 |
3 | Вася | 25 | 500 |
Пример
В данном примере строка name преобразуется к верхнему регистру с помощью ucase:
SELECT *, UCASE(name) as name FROM workers
SQL запрос выберет следующие строки:
id айди |
name имя |
age возраст |
salary зарплата |
1 | ДИМА | 23 | 300 |
2 | ПЕТЯ | 24 | 400 |
3 | ВАСЯ | 25 | 500 |
Пример
В данном примере строка name преобразуется к верхнему регистру с помощью upper:
SELECT *, UPPER(name) as name FROM workers
SQL запрос выберет следующие строки:
id айди |
name имя |
age возраст |
salary зарплата |
1 | ДИМА | 23 | 300 |
2 | ПЕТЯ | 24 | 400 |
3 | ВАСЯ | 25 | 500 |